#pragma once

#include <QtWidgets/QWidget>
#include "ui_Server.h"
#include <QSharedPointer>
#include <QJsonDocument>
#include <QJsonValue>
#include <QJsonObject>
#include <QTCPSocket>
#include <QTCPServer>
#include <QDebug>
#include <QTimer>
#include <QDateTime>

#include "http/qnetworkhttpserver.h"
#include "http/protocol.h"

struct ClientInfo {
    QString name;       // 客户端名称
    QString address;    // 客户端IP地址
    int port;           // 客户端端口
    int postCount;      // POST请求计数
    int getCount;       // GET请求计数
    qint64 lastActive;  // 最后活跃时间戳
};

class Server : public QWidget
{
    Q_OBJECT

public:
    Server(QWidget *parent = nullptr);
    ~Server();

    void initHttp();
    void initTable();

    void initTCPServer();
    void stopServer();

public slots:
    void updateClientTable();

    void slot_newConnection();
    void slot_disconnected();
    void slot_reciveData();


private:
    Ui::ServerClass ui;
    QSharedPointer<QNetworkHttpServer> m_httpServer;
    
    QTcpServer m_server;
    QMap<QString, ClientInfo> m_clientInfos; // 客户端信息映射
    QTimer* m_updateTimer; // 定时刷新表格
    QSet<QTcpSocket*> m_clientSockets;
    QTcpSocket* m_clientSocket;
};
